# DP抖音弹幕抓取
#电脑内需要提取安装谷歌浏览器或者其他chronium内核的浏览器比如 edge浏览器 qq浏览器 368浏览器
# Drissionpagetm http://drissionpege.cn/
#Drissionpage 版本需要大于等于 4.1.8.8

from DrissionPage import ChromiumPage, ChromiumOptions
import logging

# 配置日志文件（自动追加记录）
logging.basicConfig(
    filename='live_rome.log',
    level=logging.INFO,
    format='%(asctime)s - %(message)s',
    encoding='utf-8'
)
co = ChromiumOptions()
co.auto_port()  # 自动选择端口
co.headless()  # 无头模式（取消注释可在后台运行）
#连接浏览器并获取浏览器对象
browser = ChromiumPage(addr_or_opts=co)
url = 'https://live.douyin.com/101324970385'
##获取标签项对象并打开网址
tab = browser.new_tab(url)
#开始监听控制台输出
tab.console.start()
logging.info(f"开始监听记录 {tab.url} 的弹幕") 
#等待弹幕标够加鬏完成
tab.wait.eles_loaded(".webcast-chatroom___list")
tab.wait(2)

observer_code = r'''

const targetNode = document.querySelector(".webcast-chatroom___items-container") || 
                   document.querySelector(".webcast-chatroom___list");

const config = { 
    childList: true, 
    subtree: true,
    characterData: true
};

const callback = (mutationsList) => {
    mutationsList.forEach(mutation => {
        if (mutation.type === 'childList') {
            mutation.addedNodes.forEach(node => {
                if (node.nodeType === Node.ELEMENT_NODE) {
                    // 尝试获取弹幕内容的不同方式
                    const content = node.querySelector('.danmu-content')?.innerText || 
                                  node.querySelector('.chat-message')?.innerText || 
                                  node.innerText;
                    
                    if (content && content.trim()) {
                        const currentTime = new Date().toLocaleTimeString();
                        console.log(`[${currentTime}] ${content.trim()}`);
                    }
                }
            });
        }
    });
};

const observer = new MutationObserver(callback);
observer.observe(targetNode, config);

'''

tab.run_js(observer_code)

while True:
    #打印控制台的输出
    logging.info(tab.console.wait().text)
    print(tab.console.wait().text)
